package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.*;
import com.ipartek.formacion.gestformwww.modelo.beans.*;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Aitor y Xarles
 */
public class VisualizarCrearCalendarioAccion implements Accion {

    
    private final String listarcursos = "listar-cursos-accion";

    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        AccionRouter router = null;
          AccionServlet as=(AccionServlet) servlet;
        HttpSession sesion = request.getSession();
        ModeloCurso mcurso = (ModeloCurso) servlet.getServletContext().getAttribute("ModeloCurso");
        ModeloModulo mmodulo = (ModeloModulo) servlet.getServletContext().getAttribute("ModeloModulo");
        ModeloAula maula = (ModeloAula) servlet.getServletContext().getAttribute("ModeloAula");
        ModeloDiaClase mdiaclase = (ModeloDiaClase) servlet.getServletContext().getAttribute("ModeloDiaClase");
        ModeloDocente mdocente = (ModeloDocente) servlet.getServletContext().getAttribute("ModeloDocente");
        ArrayList<Modulo> modulos = new ArrayList<Modulo>();
        ArrayList<Aula> aulas = new ArrayList<Aula>();
        ArrayList<Docente> docentes = new ArrayList<Docente>();
        int idCurso = 0;
        Curso curso = new Curso();
        DiaClase diaclase = new DiaClase();
        Calendario calendario = new Calendario();
        router = new AccionRouter("principal");

        if (sesion.getAttribute("usuario") != null) {
            if (Verificador.numeroValido(request.getParameter("idCurso"))) {
                idCurso = Integer.parseInt(request.getParameter("idCurso"));
                try {
                    curso = mcurso.visualizarCurso(idCurso);

                    if (curso != null) {
                        if (request.getAttribute("calendario") != null) { //Viene de error al crear dias
                            calendario = (Calendario) request.getAttribute("calendario");
                            diaclase = calendario.getDiaClase();
                            request.setAttribute("opciones", "menucreardiaclase.jsp");
                            request.setAttribute("titulo", "Crear dia");
                            request.setAttribute("check", "true");
                            request.setAttribute("accion", "crear");
                        } else if (Verificador.numeroValido(request.getParameter("idClase"))) {//Modificar diaClase
                            diaclase = mdiaclase.getDiaClase(Integer.parseInt(request.getParameter("idClase")));
                            calendario.setCalFechaIni(diaclase.getClaFecha());
                            calendario.setCalFechaFin(diaclase.getClaFecha());
                            ArrayList<DiaClase> diasConflicto = mdiaclase.getDiasConflictos(diaclase);
                            if (!diasConflicto.isEmpty()) {
                                request.setAttribute("dias-conflicto", diasConflicto);
                            }
                            request.setAttribute("opciones", "menumodificardiaclase.jsp");
                            request.setAttribute("titulo", "Modificar dia");
                            request.setAttribute("accion", "modificar");
                        } else if (request.getParameter("fecha") != null && Verificador.fechaValida(request.getParameter("fecha"))) {//Crear diaClase
                            Timestamp fecha = Verificador.stringAFecha(request.getParameter("fecha"));
                            calendario.setCalFechaIni(fecha);
                            calendario.setCalFechaFin(fecha);
                            diaclase.setClaHoraInicioMan(curso.getCurHoraInicio());
                            diaclase.setClaHoraFinMan(curso.getCurHoraFin());
                            request.setAttribute("opciones", "menucreardiaclase.jsp");
                            request.setAttribute("titulo", "Crear dia");
                            request.setAttribute("check", "true");
                            request.setAttribute("accion", "crear");
                        } else if (request.getAttribute("calendario") == null) {//Generar calendario
                            calendario.setCalFechaIni(curso.getCurFchaInReal());
                            calendario.setCalFechaFin(curso.getCurFchaFinReal());
                            diaclase.setCurId(idCurso);
                            diaclase.setClaHoraInicioMan(curso.getCurHoraInicio());
                            diaclase.setClaHoraFinMan(curso.getCurHoraFin());
                            request.setAttribute("opciones", "menugenerarcalendario.jsp");
                            request.setAttribute("titulo", "Generar calendario");
                            request.setAttribute("check", "true");
                            request.setAttribute("accion", "generar");
                        }
                        calendario.setDiaClase(diaclase);
                        aulas = maula.listarAulas();
                        docentes = mdocente.listarDocentes();
                        modulos = mmodulo.listarModulos(idCurso);
                        request.setAttribute("curso", curso);
                        request.setAttribute("calendario", calendario);
                        request.setAttribute("contenido", "crear-calendario");
                        request.setAttribute("aulas", aulas);
                        request.setAttribute("docentes", docentes);
                        request.setAttribute("modulos", modulos);
                    } else {
                        try {
                            router=as.getFactory().getAction(as.getNombreClaseRecurso(listarcursos),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                        } catch (ClassNotFoundException ex) {
                            Logger.getLogger(VisualizarCrearCalendarioAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (InstantiationException ex) {
                            Logger.getLogger(VisualizarCrearCalendarioAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (IllegalAccessException ex) {
                            Logger.getLogger(VisualizarCrearCalendarioAccion.class.getName()).log(Level.SEVERE, null, ex);
                        }
                   
                    }
                } catch (GestorFormacionExcepcion ex) {
                    sesion.setAttribute("excepciones", ex.getMessage());
                    Logger.getLogger(VisualizarCrearCalendarioAccion.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        } else {
            router = new AccionRouter("inicio", false);
        }
        return router;
    }

   
}
